主题
通过句柄修改数据库密码 - ChangeDatabasePasswordFromPtr
函数简介
在已打开的数据库连接上修改密码。连接须已用正确密码通过 OpenDatabase 或 CreateDatabase 打开,无需再传旧密码。修改成功后原句柄可继续使用。
与 ChangeDatabasePassword 的区别:后者按文件路径操作,会关闭已有连接;本接口在现有连接上直接 rekey。
接口名称
ChangeDatabasePasswordFromPtrDLL调用
c
int ChangeDatabasePasswordFromPtr(long ola, long db, string newPassword);参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| ola | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| db | 长整数型 | 数据库连接句柄;传 0 表示默认库(需已打开)。 |
| newPassword | 字符串 | 新数据库密码;传空字符串可移除加密。 |
示例
SDK 调用
cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
long db = ola.OpenDatabase("data/app.db", "old_pwd");
if (db != 0) {
int ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd");
if (ret != 0) {
// 句柄仍有效,可继续操作
ola.ExecuteSql(db, "SELECT 1");
}
ola.CloseDatabase(db);
}csharp
using OLAPlug;
var ola = new OLAPlugServer();
long db = ola.OpenDatabase("data/app.db", "old_pwd");
if (db != 0)
{
int ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd");
if (ret != 0)
{
ola.ExecuteSql(db, "SELECT 1");
}
ola.CloseDatabase(db);
}python
from OLAPlugServer import OLAPlugServer
ola = OLAPlugServer()
db = ola.OpenDatabase("data/app.db", "old_pwd")
if db != 0:
ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd")
if ret != 0:
ola.ExecuteSql(db, "SELECT 1")
ola.CloseDatabase(db)java
import com.olaplug.OLAPlugServer;
OLAPlugServer ola = new OLAPlugServer();
long db = ola.OpenDatabase("data/app.db", "old_pwd");
if (db != 0) {
int ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd");
if (ret != 0) {
ola.ExecuteSql(db, "SELECT 1");
}
ola.CloseDatabase(db);
}go
import "github.com/ola/olaplug/olaplug"
ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
db := ola.OpenDatabase("data/app.db", "old_pwd")
if db != 0 {
ret := ola.ChangeDatabasePasswordFromPtr(db, "new_pwd")
if ret != 0 {
// 句柄仍有效,可继续操作
ola.ExecuteSql(db, "SELECT 1")
}
ola.CloseDatabase(db)
}rust
use olaplug::OLAPlugServer;
let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
let db = ola.open_database("data/app.db", "old_pwd");
if db != 0 {
let ret = ola.change_database_password_from_ptr(&db, "new_pwd");
if ret != 0 {
// 句柄仍有效,可继续操作
ola.execute_sql(&db, "SELECT 1");
}
ola.close_database(&db);
}cpp
var ola = com("OlaPlug.OlaSoft")
var db = ola.OpenDatabase("data/app.db", "old_pwd")
if(db) {
var ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd")
if(ret) {
ola.ExecuteSql(db, "SELECT 1")
}
ola.CloseDatabase(db)
}vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
db = ola.OpenDatabase("data/app.db", "old_pwd")
If db <> 0 Then
ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd")
If ret <> 0 Then
ola.ExecuteSql(db, "SELECT 1")
End If
ola.CloseDatabase(db)
End Iftext
.局部变量 ola, OLAPlug
ola.创建 ()
db = ola.OpenDatabase (“data/app.db“, “old_pwd“)
.如果真 (db ≠ 0)
ret = ola.ChangeDatabasePasswordFromPtr (db, “new_pwd“)
.如果真 (ret ≠ 0)
ola.ExecuteSql (db, "SELECT 1")
.如果真结束
ola.CloseDatabase (db)
.如果真结束aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var db = ola.OpenDatabase("data/app.db", "old_pwd");
if(db){
var ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd");
if(ret){
ola.ExecuteSql(db, "SELECT 1");
}
ola.CloseDatabase(db);
}text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
长整数 db = ola.OpenDatabase("data/app.db", "old_pwd")
如果真 (db ≠ 0)
{
整数 ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd")
如果真 (ret ≠ 0)
{
ola.ExecuteSql(db, "SELECT 1")
}
ola.CloseDatabase(db)
}cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
long db = ola.OpenDatabase("data/app.db", "old_pwd");
if (db != 0) {
int ret = ola.ChangeDatabasePasswordFromPtr(db, "new_pwd");
if (ret != 0) {
ola.ExecuteSql(db, "SELECT 1");
}
ola.CloseDatabase(db);
}原生 DLL 调用
cpp
long instance = CreateCOLAPlugInterFace();
long db = OpenDatabase(instance, "data/app.db", "old_pwd");
if (db != 0) {
int ret = ChangeDatabasePasswordFromPtr(instance, db, "new_pwd");
if (ret != 0) {
ExecuteSql(instance, db, "SELECT 1");
}
CloseDatabase(instance, db);
}csharp
using System.Runtime.InteropServices;
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
long instance = CreateCOLAPlugInterFace();
long db = OpenDatabase(instance, "data/app.db", "old_pwd");
if (db != 0)
{
int ret = ChangeDatabasePasswordFromPtr(instance, db, "new_pwd");
if (ret != 0)
{
ExecuteSql(instance, db, "SELECT 1");
}
CloseDatabase(instance, db);
}python
from ctypes import CDLL, c_int, c_int64
ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
db = ola.OpenDatabase(instance, b"data/app.db", b"old_pwd")
if db:
ret = ola.ChangeDatabasePasswordFromPtr(instance, db, b"new_pwd")
if ret:
ola.ExecuteSql(instance, db, b"SELECT 1")
ola.CloseDatabase(instance, db)返回值
| 返回值 | 说明 |
|---|---|
1 | 成功。 |
| 负数 | 失败;绝对值为错误码。与 GetLastError() 一致。 |
完整错误码表见 数据库错误码说明。
注意事项
| 项目 | 说明 |
|---|---|
| 前置条件 | 须先用正确密码打开数据库,连接已处于可读状态。 |
| 句柄保持有效 | 与 ChangeDatabasePassword 不同,成功后无需重新 OpenDatabase。 |
| 磁盘库 | 会执行 VACUUM 将新密码写入文件。 |
| 内存库 | 仅影响当前会话,不落盘。 |
| 默认库 | 若 db 为默认库句柄(或传 0),会自动更新 DbPassword。 |
| 下次打开 | 其他进程或新连接须使用新密码打开。 |
